package com.nd.rj.common.login;

import java.util.ArrayList;

import android.content.Context;
import android.text.TextUtils;

import com.nd.rj.common.login.DataDef.NdLoginConst;
import com.product.android.business.bean.UserInfo;

/**
 * @ClassName: NdLoginplatform
 * @Description: TODO(登陆sdk)
 * @author Administrator
 * @date 2011-12-29 上午09:36:26
 */
public class NdLoginplatform {

	private static NdLoginplatform mLogin = null;

	public Context mContext;

	/* 登陆类型(0 uap 1 oap) */
	public int mType = NdLoginConst.LOGIN_TYPE_UAP;

	private NdLoginplatform(int type) {
		mType = type;
	}

	/* 类型默认是(uap) */
	/**
	 * @n<b>函数名称</b> :getInstance
	 * @brief
	 * @see
	 * @param @param type 登录的类型：OAP/UAP，具体常量定义在NdLoginConst类里面
	 * @param @return
	 * @return NdLoginplatform
	 * @<b>作者</b> : cb
	 * @<b>创建时间</b> : 2013-5-23下午8:54:56
	 */
	public static NdLoginplatform getInstance(int type) {
		if (mLogin == null) {
			mLogin = new NdLoginplatform(type);
		}
		return mLogin;
	}

	/**
	 * @Title: getUserList
	 * @Description:(获取登陆过的用户列表)
	 * @author Administrator
	 * @date 2012-2-2 下午02:13:25
	 * @param ctx
	 * @return
	 * @return ArrayList<UserInfo>
	 * @throws
	 */
	public ArrayList<UserInfo> getUserList(Context ctx) {
		return LoginPro.getInstance(ctx).getUserList();
	}

	/**
	 * @Title: getLastUserInfo
	 * @Description: 获取最后一次登陆的用户(不存在返回null)
	 * @author Administrator
	 * @date 2012-2-2 下午02:13:49
	 * @param ctx
	 * @return
	 * @return UserInfo
	 * @throws
	 */
	public UserInfo getLastUserInfo(Context ctx) {
		mContext = ctx;
		UserInfo user = LoginPro.getInstance(ctx).getLastUserInfo();
		// return user.getUapUid() > 0 ? user : null;
		// V1.0用户登录是直接用帐号密码登录UAP或者OAP
		// V1.1用户需要用更加严谨的方式登录，并且登录完成之后会得到票据。未得到票据的用户都需要重新登录一次
		return TextUtils.isEmpty(user.getTicket()) ? null : user;

	}

	public UserInfo getLastUserInfoIngoreTicket(Context ctx) {
		mContext = ctx;
		UserInfo user = LoginPro.getInstance(ctx).getLastUserInfo();
		return user.getUapUid() > 0 ? user : null;
	}

	/**
	 * @Title: logOut
	 * @Description: (登出)
	 * @author Administrator
	 * @date 2012-2-7 下午08:22:29
	 * @param ctx
	 * @param uid
	 * @param sid
	 * @return void
	 * @throws
	 */
	public void logOut(Context ctx, long uid, String sid) {
		mContext = ctx;
		LoginPro.getInstance(ctx).logOut(uid, sid);
	}

	/**
	 * @Title: loginSync
	 * @Description: 登陆接口(同步方式)
	 * @author Administrator
	 * @date 2012-2-6 下午05:12:57
	 * @param ctx
	 * 
	 * @param user
	 * @param errmsg
	 * @return
	 * @return int
	 * @throws
	 */
	public int loginSync(Context ctx, UserInfo user, StringBuilder errmsg) {
		mContext = ctx;
		return LoginPro.getInstance(ctx).userLoginByTicket(mType, user, errmsg);
	}

	/**
	 * @n<b>函数名称</b> :loginSyncForLastUser
	 * @brief 使用上一次登录的用户同步登录
	 * @see
	 * @param @param ctx
	 * @param @param errmsg
	 * @param @return
	 * @return int
	 * @<b>作者</b> : cb
	 * @<b>创建时间</b> : 2013-5-27下午1:39:03
	 */
	public int loginSyncForLastUser(Context ctx, StringBuilder errmsg) {
		UserInfo user = LoginPro.getInstance(ctx).getLastUserInfo();
		return LoginPro.getInstance(ctx).userLoginByTicket(mType, user, errmsg);
	}

	/**
	 * @Title: deleteUser
	 * @Description: (删除已有帐号)
	 * @author Administrator
	 * @date 2012-2-6 下午05:09:20
	 * @param ctx
	 * @param uap_uid
	 * @return void
	 * @throws
	 */
	public void deleteUser(Context ctx, long uap_uid) {
		mContext = ctx;
		LoginPro.getInstance(ctx).deleteUser(uap_uid);
	}

	/**
	 * @Title: deleteAllUsers
	 * @Description: TODO(删除所有用户)
	 * @author yanyy
	 * @date 2012-11-12 上午10:43:34
	 * 
	 * @param ctx
	 * @return void
	 * @throws
	 */
	public void deleteAllUsers(Context ctx) {
		mContext = ctx;
		LoginPro.getInstance(ctx).deleteAllUsers();
	}

	/**
	 * @Title: clearPassWord
	 * @Description: TODO(清理某个用户密码)
	 * @author yanyy
	 * @date 2012-11-12 上午11:08:18
	 * 
	 * @param ctx
	 * @param uap_uid
	 * @return void
	 * @throws
	 */
	public void clearPassWord(Context ctx, long uap_uid) {
		mContext = ctx;
		LoginPro.getInstance(ctx).clearPassWord(uap_uid);
	}

	/**
	 * @Title: getWlSid
	 * @Description: TODO(获取无线sid)
	 * @author Administrator
	 * @date 2012-2-9 下午03:17:43
	 * @param uid
	 *            {uap_uid}
	 * @param siteid
	 *            {帐号类型}
	 * @param outSid
	 *            {输出sid}
	 * @param errmsg
	 *            {服务器错误信息}
	 * @return
	 * @return int
	 * @throws
	 */
	public int getWlSid(Context ctx, long uid, int siteid,String sid,StringBuilder outSid, StringBuilder errmsg) {
		mContext = ctx;
		return LoginPro.getInstance(ctx).getWlSid(uid, siteid,sid, outSid, errmsg);
	}

	/**
	 * @Title: loginBySessionId
	 * @Description: TODO(通过sid登陆uap)
	 * @author yanyy
	 * @date 2012-12-3 下午06:51:34
	 * 
	 * @param ctx
	 * @param username
	 * @param sid
	 * @return
	 * @return UserInfo
	 * @throws
	 */
	public UserInfo loginBySessionId(Context ctx, String username, String sid) {
		try {
			LoginPro lp = LoginPro.getInstance(ctx);
			UserInfo u = lp.getUserByUserName(username);
			long uid = lp.checkSessionId(ctx, sid);
			if (uid > 0) {
				// 查找本地是否有用户
				if (u == null) {
					u = new UserInfo();
					u.setUapUid(uid);
					u.setUserName(username);
				}
				u.setSessionId(sid);
				lp.setUserInfo(u);
			}
			return u;
		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * 设置扩展字段的值
	 * 
	 * @param uap_uid
	 * @param var_ext
	 * @return
	 */

	public int SetExtInfo(Context ctx, long uap_uid, String var_ext) {
		return LoginPro.getInstance(ctx).setExtInfo(uap_uid, var_ext);
	}
}
